package com.elysia.visionmanagerspringboot.handler;

import com.aliyun.oss.OSSException;
import com.aliyun.tea.TeaException;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.elysia.visionmanagerspringboot.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    // 参数非法异常（如 IllegalArgumentException）
    @ExceptionHandler(IllegalArgumentException.class)
    public Result<String> handleIllegalArgException(IllegalArgumentException ex) {
        log.error("参数异常：{}", ex.getMessage());
        return Result.error("参数错误：" + ex.getMessage()); // 明确提示“参数错误”
    }

    // 阿里云OSS相关异常（如 OSSException）
    @ExceptionHandler(OSSException.class)
    public Result<String> handleOssException(OSSException ex) {
        log.error("OSS异常：{}", ex.getMessage());
        return Result.error("文件存储异常，请稍后重试"); // 针对性提示
    }

    // 阿里云MTS相关异常（如 TeaException）
    @ExceptionHandler(TeaException.class)
    public Result<String> handleMtsException(TeaException ex) {
        log.error("MTS异常：{}", ex.getMessage());
        return Result.error("视频处理异常，请稍后重试"); // 针对性提示
    }

    // 处理MyBatis-Plus数据库异常
    @ExceptionHandler(MybatisPlusException.class)
    public Result<String> handleMybatisPlusException(MybatisPlusException ex) {
        log.error("数据库操作异常：{}", ex.getMessage(), ex);
        return Result.error("数据处理异常，请稍后重试");
    }

    // 所有未被单独捕获的异常（最后生效）
    @ExceptionHandler(Exception.class)
    public Result<String> handleOtherExceptions(Exception ex) {
        log.error("系统异常：", ex); // 打印完整堆栈，方便排查
        return Result.error("系统异常，请稍后重试"); // 通用提示，避免暴露敏感信息
    }
}
